using System;
using System.Collections.Generic;
using System.Text;
using RRHH.Competencias.DataAccessLayer.Generic;
using RRHH.Competencias.DataAccessLayer;
using RRHH.Competencias.Entities;



namespace RRHH.Competencias.Controladores
{
    public class GestorCapacidad
    {
        private IDALCapacidad persistencia;
        
        public GestorCapacidad()
        {
            try
            {
                persistencia = DALProvider.GetDALCapacidad();                
            }
            catch (Exception ex)
            {   
                throw;
            }
        }

        /// <summary>
        /// Crea una capacidad
        /// </summary>
        /// <param name="capacidad">Capacidad a crear. Se devuelve el ID de la capacidad creada</param>
        public void Registrar(Capacidad capacidad)
        {
            if (capacidad == null) throw new Exception("Debe indicar la capacidad");
            try
            {
                persistencia.Guardar(capacidad);
            }
            catch (Exception ex)
            {   
                throw ex;
            }
        }


        public void Completar(Capacidad capacidad)
        {
            try
            {
                persistencia.Completar(capacidad);
                if (capacidad != null)
                {
                    if (capacidad.Tipo != null)
                    {
                        GestorEnumerador<TipoCapacidad> gTipoCapacidad = new GestorEnumerador<TipoCapacidad>();
                        capacidad.Tipo = gTipoCapacidad.GetItem(capacidad.Tipo.Id);
                    }
                    if (capacidad.Nivel != null)
                    {
                        GestorEnumerador<NivelCapacidad> gNivelCapacidad = new GestorEnumerador<NivelCapacidad>();
                        capacidad.Nivel = gNivelCapacidad.GetItem(capacidad.Nivel.Id);
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

        }


        public void Modificar(Capacidad capacidad)
        {
            if (capacidad == null) throw new Exception("Debe indicar la capacidad");
            if (capacidad.Id <= 0) throw new Exception("Debe indicar el ID de la capacidad");
            try
            {
                persistencia.Actualizar(capacidad);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Desactiva una Capacidad
        /// </summary>
        /// <param name="capacidad"></param>
        public void Desactivar(Capacidad capacidad)
        {
            if (capacidad == null) throw new Exception("Debe indicar la capacidad");
            if (capacidad.Id <= 0) throw new Exception("Debe indicar el ID de la capacidad");
            try
            {
                persistencia.Desactivar(capacidad);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Activa una Capacidad
        /// </summary>
        /// <param name="capacidad"></param>
        public void Activar(Capacidad capacidad)
        {
            if (capacidad == null) throw new Exception("Debe indicar la capacidad");
            if (capacidad.Id <= 0) throw new Exception("Debe indicar el ID de la capacidad");
            try
            {
                persistencia.Activar(capacidad);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        /// <summary>
        /// Busca todos las capacidades que coincidan con los parametros de busqueda
        /// </summary>
        /// <param name="capacidad_id"></param>
        /// <param name="nombre"></param>
        /// <param name="tipoCapacidad"></param>
        /// <returns></returns>
        public List<Capacidad> Buscar(long? capacidad_id, string nombre, string descripcion, TipoCapacidad tipoCapacidad, bool soloActivos)
        {
            try
            {
                return persistencia.Buscar(capacidad_id, nombre, descripcion, tipoCapacidad, soloActivos);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }


        public List<Capacidad> BuscarTodos()
        {
            try
            {
                return persistencia.BuscarTodos();
            }
            catch (Exception ex)
            {
                
                throw ex;
            }
        }

    }
}
